//package com.wan37.logic.fighting.auto;
//
//import com.wan37.client.ClientHandler;
//import com.wan37.logic.fighting.SkillDelayThreadPool;
//import com.wan37.protobuf.constant.AllRoleLabel;
//import com.wan37.protobuf.message.client2server.game.GameEntity;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//import java.util.concurrent.LinkedBlockingQueue;
//import java.util.concurrent.ThreadPoolExecutor;
//import java.util.concurrent.TimeUnit;
//
///**
// * 玩家和boss之间的战斗
// * @author : luoyong
// * @date : 2020-07-02 09:31
// **/
//@Component("AutoPVEFightingService")
//public class AutoPVEFightingServiceImpl implements AutoFighting {
//
//    private final static Logger logger = LoggerFactory.getLogger(AutoPVEFightingServiceImpl.class);
//    public static int index = 0;
//    /**
//     * boss场景战斗线程池，方便停止战斗
//     */
//    public static Map<String, ThreadPoolExecutor> sceneNameToExecutor = new ConcurrentHashMap<>();
//
//    @Override
//    public void fighting(String sceneId, String attackId) {
//
//        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
//                10,20,60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(20), r -> {
//            Thread thread = new Thread(r);
//            thread.setName("玩家和boss对战技能线程池");
//            thread.setDaemon(true);
//            return thread;
//        });
//
//        List<GameEntity.AllRole> monsterList = new ArrayList<>();
//        List<GameEntity.AllRole> roleList = new ArrayList<>();
//        for(GameEntity.AllRole allRole : ClientHandler.allRoleMap.values()){
//            String allRoleId = allRole.getAllRoleId();
//            for(GameEntity.Skill skill : AutoSkillServiceManager.allRoleIdToSkillMap.get(allRoleId)){
//                skillDelayThreadPool.initAdd(allRoleId, skill);
//            }
//            if (allRole.getLabel() == AllRoleLabel.MONSTER){
//                monsterList.add(allRole);
//            }else if (allRole.getLabel() == AllRoleLabel.ROLE){
//                roleList.add(allRole);
//            }
//        }
//
//        //当前战斗的boss
//        GameEntity.AllRole monster = monsterList.get(index);
//
//        for (GameEntity.AllRole allRole : roleList){
//            threadPool.execute(()->{
//                GameEntity.Skill skill = AutoSkillServiceManager.getPbqSkill(allRole.getAllRoleId());
//                if (skill != null){
//                    if (allRole.getHP() - skill.getCostHP() < 0){
//                        logger.info(allRole.getNickname() + " 使用 " +
//                                skill.getName() + " 技能失败，HP不够 " );
//                        SkillDelayThreadPool.add(allRole.getAllRoleId(), skill, 2);
//                    }else {
//                        clientHandler.sendAttackMessage(allRole.getAllRoleId(), monster.getAllRoleId(), skill.getId());
//                        logger.info(allRole.getAllRoleId() + " 使用 " +
//                                skill.getName() + " 技能攻击了 " + monster.getAllRoleId());
//                    }
//                }
//            });
//        }
//
//        threadPool.execute(()->{
//            GameEntity.Skill skill = AutoSkillServiceManager.getPbqSkill(monster.getAllRoleId());
//            if (skill != null){
//                if (monster.getHP() - skill.getCostHP() < 0){
//                    logger.info(monster.getNickname() + " 使用 " +
//                            skill.getName() + " 技能失败，HP不够 " );
//                    SkillDelayThreadPool.add(monster.getAllRoleId(), skill, 2);
//                }else {
//                    for (GameEntity.AllRole allRole : roleList){
//
//                        if (allRole.getStatus() == 1){
//                            clientHandler.sendAttackMessage(monster.getAllRoleId(),
//                                    allRole.getAllRoleId(), skill.getId());
//                            logger.info(monster.getNickname() + " 使用 " +
//                                    skill.getName() + " 技能攻击了 " + allRole.getNickname());
//                            break;
//                        }
//                    }
//                }
//            }
//        });
//        sceneNameToExecutor.put(clientHandler.current_scene, threadPool);
//    }
//}
